import { useState, useEffect, useCallback } from 'react';
import { getHotspots } from '../services/api';

export const useHotspots = (initialPlatform = '微博') => {
  const [hotspots, setHotspots] = useState([]);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);
  const [selectedPlatform, setSelectedPlatform] = useState(initialPlatform);
  const [lastRefreshTime, setLastRefreshTime] = useState(new Date());

  const loadHotspots = useCallback(async (platform, isAutoRefresh = false) => {
    try {
      // 只有在非自动刷新时才显示加载状态
      if (!isAutoRefresh) {
        setLoading(true);
      }
      setError(null);
      const data = await getHotspots(platform, false);
      
      // 只有在有数据返回时才更新，否则保持历史数据
      if (data && data.length > 0) {
        setHotspots(data);
        setLastRefreshTime(new Date());
      } else if (isAutoRefresh) {
        // 自动刷新时如果没有数据，保持当前数据不变
        console.log('自动刷新无新数据，保持历史数据');
      } else {
        // 手动刷新时如果没有数据，仍然更新为空
        setHotspots(data || []);
        setLastRefreshTime(new Date());
      }
      
      // 可以在这里添加成功通知，但需要从父组件传入toast函数
    } catch (err) {
      if (!isAutoRefresh) {
        setError('获取热点数据失败');
      }
      console.error('Error fetching hotspots:', err);
    } finally {
      if (!isAutoRefresh) {
        setLoading(false);
      }
    }
  }, []);

  const handlePlatformChange = useCallback((platform) => {
    setSelectedPlatform(platform);
  }, []);

  const refreshData = useCallback(() => {
    loadHotspots(selectedPlatform);
  }, [selectedPlatform, loadHotspots]);

  // 初始加载和平台切换触发
  useEffect(() => {
    loadHotspots(selectedPlatform);
  }, [selectedPlatform, loadHotspots]);

  // 5分钟自动刷新 - 静默进行
  useEffect(() => {
    const interval = setInterval(() => {
      console.log('静默自动刷新热搜数据...');
      loadHotspots(selectedPlatform, true); // 传入true标识为自动刷新
    }, 5 * 60 * 1000); // 5分钟 = 300秒

    return () => {
      clearInterval(interval);
    };
  }, [selectedPlatform, loadHotspots]);

  return {
    hotspots,
    loading,
    error,
    selectedPlatform,
    handlePlatformChange,
    refreshData,
    lastRefreshTime
  };
};